package com.luzhikun.filters;


import javax.servlet.*;

import java.io.IOException;

/**
 * @Author Rookie Coder
 * @Description JavaWeb三大组件之Filter(过滤器)
 * @Date Filter过滤器的生命周期
 * filter是在启动时被创建和初始化的
 * filter是单例多线程的
 * filter是应用停止时被销毁
 * doFilter()方法是无论那个线程访问，只要由该过滤器过滤，doFilter方法都会执行，即doFilter方法是可以被多次执行的
 * 由于Filter是单例多线程的，所以为了保证线程的安全性，一般情况下是不为Filter类定义可修改的成员变量的，因为每个线程
 * 均可修改这个变量，会出现线程安全问题
 **/
public class MyFilter implements Filter {
    /*
     * @Author liu-miss
     * @Description 创建过滤器
     * @Date 20:12 2021/5/3
     * @Param []
     * @return
     **/
    public MyFilter() {
        System.out.println("创建过滤器");
    }

    /*
     * @Author liu-miss
     * @Description 初始化过滤器
     * @Date 20:12 2021/5/3
     * @Param
     * @return
     **/

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println(" 初始化过滤器");
    }

    /*
     * @Author liu-miss
     * @Description 执行过滤器
     * @Date 20:11 2021/5/3
     * @Param [servletRequest, servletResponse, filterChain]
     * @return void
     **/
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {

        System.out.println("执行MyFilter----before");
        //  将请求放行到下一个资源
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("执行MyFilter----after");
    }

    /*
     * @Author liu-miss
     * @Description 销毁过滤器
     * @Date 20:12 2021/5/3
     * @Param
     * @return
     **/

    @Override
    public void destroy() {
        System.out.println(" 销毁过滤器");
    }

}
